﻿using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;

namespace HKTools
{
    /// <summary>
    /// HK_TargetSystem 编辑器下添加 目标点枚举类型 静态方法
    /// </summary>
    public class HK_AddTargetEnumValue
    {
        public static void AddTargetType(HK_BaseTarget target)
        {
            string objName = target.name.Trim();

            objName = objName.Replace(" ", "");

            // 检查 objName 是否是数字或以数字开头  
            if (int.TryParse(objName, out _) || char.IsDigit(objName[0]))
            {
                HKDebug.LogError($"目标名称 '{objName}' 不能是数字或以数字开头，无法添加枚举值。");
                return;
            }

            // HK_TargetEnumType 的脚本文件路径  
            string filePath = "Assets/HKTools/ForRuntime/2.HK_TargetCam/Scripts/Configs/HK_TargetEnumType.cs";

            if (!File.Exists(filePath))
            {
                HKDebug.LogError($"文件 '{filePath}' 不存在。");
                return;
            }

            // 读取文件内容  
            string fileContent = File.ReadAllText(filePath);

            // 正则表达式匹配枚举定义  
            string pattern = @"enum\s+HK_TargetEnum\s*{([^}]*)}";
            Match match = Regex.Match(fileContent, pattern);

            if (!match.Success)
            {
                HKDebug.LogError("未找到 HK_TargetEnum 枚举定义。");
                return;
            }

            // 获取当前的枚举值  
            string enumBody = match.Groups[1].Value;
            string newEnumValue = $"{objName},";

            // 检查是否已经存在该枚举值  
            string enumName = $@"\b{Regex.Escape(objName)}\b"; // 使用正则表达式匹配完整的枚举值  
            if (Regex.IsMatch(enumBody, enumName))
            {
                HKDebug.LogWarning($"枚举值 '{objName}' 已经存在。");
                return;
            }

            // 在枚举体末尾添加新的枚举值  
            string updatedEnumBody;

            // 判断最后一个枚举值是否包含英文逗号
            if (enumBody.Trim().EndsWith(","))
            {
                updatedEnumBody = enumBody.TrimEnd() + "\n\t\t" + newEnumValue + "\n\t";
            }
            else
            {
                updatedEnumBody = enumBody.TrimEnd() + ",\n\t\t" + newEnumValue + "\n\t";
            }

            string updatedFileContent = fileContent.Replace(enumBody, updatedEnumBody);

            // 写回文件  
            File.WriteAllText(filePath, updatedFileContent);

            // 刷新和保存  
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            // 标记对象为脏，以便更新Inspector  
            EditorUtility.SetDirty(target);

            HKDebug.Log($"成功添加枚举值 '{newEnumValue.TrimEnd(',')}' 到 HK_TargetEnum。");
        }
    }
}